package com.silverbox.waimai.dubboApi.goodscart;

import java.util.List;

import com.silverbox.waimai.entity.GoodsCart;
import com.silverbox.waimai.entity.extend.GoodsCartAndDetail;
import com.silverbox.waimai.entity.extend.GoodsCartExtend;

/**
 * 购物车接口
 * 
 * @author CAOXJ
 * @date 2017年12月3日
 * @description
 */
public interface GoodsCartServiceApi {

	/**
	 * 根据用户id获取购物车以及明细
	 * 
	 * @param storeId
	 * @param buyerId
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	List<GoodsCartAndDetail> getGoodsCartByBuyerId(Integer storeId, String buyerId, String startDate, String endDate,Integer clientOrderMode);

	/**
	 * 根据桌台号获取购物车以及明细
	 * 
	 * @param storeId
	 * @param tableNo
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	List<GoodsCartAndDetail> getGoodsCartByTableNo(Integer storeId, String tableNo, String startDate, String endDate,Integer clientOrderMode);
	
	/**
	 * 根据桌台号和用户id获取购物车以及明细
	 * 
	 * @param storeId
	 * @param tableNo
	 * @param startDate
	 * @param endDate
	 * @param buyerId
	 * @return
	 */
	List<GoodsCartAndDetail> getGoodsCartByTableNoAndBuyerId(Integer storeId, String tableNo, String startDate, String endDate, String buyerId);

	/**
	 * 根据购物车id获取购物车以及明细
	 * 
	 * @param id
	 * @return
	 */
	GoodsCartAndDetail getGoodsCartById(Integer id);

	/**
	 * 保存购物车以及明细
	 * 
	 * @param goodsCart
	 * @return
	 */
	int saveGoodsCart(GoodsCartAndDetail goodsCartAndDetail);

	/**
	 * 根据id更新购物车
	 * 
	 * @param id
	 * @param buyCount
	 */
	int updateGoodsCart(GoodsCart goodsCart);

	/**
	 * 根据购物车id删除购物车以及明细
	 * 
	 * @param id
	 */
	int deleteGoodsCartById(Integer id);

	/**
	 * 根据桌台号清空购物车
	 * 
	 * @param storeId
	 * @param tableNo
	 */
	void removeGoodsCartByTableNo(Integer storeId, String tableNo,Integer mustOrder);
	
	/**
	 * 根据桌台号和顾客ID清空购物车
	 * 
	 * @param storeId
	 * @param tableNo
	 */
	void removeGoodsCartByTableNoAndBuyerId(Integer storeId, String tableNo, Integer mustOrder, String buyerId);

	/**
	 * 根据buyerId清空购物车
	 * 
	 * @param storeId
	 * @param buyerId
	 */
	void removeGoodsCartByBuyerId(Integer storeId, String buyerId,Integer mustOrder);

	/**
	 * 根据桌台更新打包信息(整单打包)
	 * 
	 * @param storeId
	 * @param tableNo
	 * @param goodsDesc
	 */
	int updateGoodsCartPackByTableNo(Integer storeId, String tableNo, String goodsDesc);
	
	/**
	 * 根据桌台和用户id更新打包信息(整单打包)
	 * 
	 * @param storeId
	 * @param tableNo
	 * @param goodsDesc
	 */
	int updateGoodsCartPackByTableNoAndBuyerId(Integer storeId, String tableNo, String goodsDesc, String buyerId);

	/**
	 * 根据用户id更新打包信息(整单打包)
	 * 
	 * @param storeId
	 * @param buyerId
	 * @param goodsDesc
	 */
	int updateGoodsCartPackByBuyerId(Integer storeId, String buyerId, String goodsDesc);

	/**
	 * 根据桌台判断购物车是否存在同一商品相同属性
	 * 
	 * @param goodsCart
	 * @return
	 */
	GoodsCart getSamePropGoodsByTableNo(GoodsCartExtend goodsCart);

	/**
	 * 根据用户id判断购物车是否存在同一商品相同属性
	 * 
	 * @param goodsCart
	 * @return
	 */
	GoodsCart getSamePropGoodsByBuyerId(GoodsCartExtend goodsCart);

	/**
	 * 根据桌台获取购物车同一商品不同属性的种类数
	 * 
	 * @param goodsCart
	 * @return
	 */
	int getSameGoodsDiffPropNumByTableNo(GoodsCartExtend goodsCart);

	/**
	 * 根据用户id获取购物车同一商品不同属性的种类数
	 * 
	 * @param goodsCart
	 * @return
	 */
	int getSameGoodsDiffPropNumByBuyerId(GoodsCartExtend goodsCart);

	/**
	 * 根据桌台获取购物车商品打包获取相同的商品数量
	 * 
	 * @param goodsCart
	 * @return
	 */
	int getGoodsCartPackCountByTableNo(GoodsCartExtend goodsCart);

	/**
	 * 根据用户id获取购物车商品打包获取相同的商品数量
	 * 
	 * @param goodsCart
	 * @return
	 */
	int getGoodsCartPackCountById(GoodsCartExtend goodsCart);

	/**
	 * 根据桌台删除购物车内相同商品的数据
	 * 
	 * @param goodsCart
	 * @return
	 */
	int deleteGoodsPackByTableNo(GoodsCartExtend goodsCart);

	/**
	 * 根据用户id删除购物车内相同商品的数据
	 * 
	 * @param goodsCart
	 * @return
	 */
	int deleteGoodsPackByBuyerId(GoodsCartExtend goodsCart);
	
	/**
	 * 备注页修改属性提交时判断购物车有无相同属性的菜品
	 * 
	 * @param goodsCart
	 * @return
	 */
	GoodsCart getGoodsCartByRemarkCommit(GoodsCartExtend goodsCart);

	/**
	 * 如果存在预点餐的购物车，再进入有桌台时，把桌台信息添加进入购物车
	 * @param  storeId
	 * @param  buyerId
	 * @param  tableName   
	 * @return void  
	 * @author litao
	 * @date 2018年4月23日
	 */
	int updateGoodsCartForTableNo(List<Integer> goodsCartId, String tableName);

	/**
	 * 清空一定时间段的购物车
	 * @param storeId
	 * @param tableName
	 * @param createTime
	 */
	int deleteGoodsCartByTableName(Integer storeId, String tableName, String createTime);
	
	/**
	 * 更新购物车必选菜（删除后新增）
	 * @param goodsCart 
	 * @param goodsCartExtend 
	 * 
	 */
	int updateGoodsCartForMustGoods(GoodsCartExtend goodsCartExtend, List<GoodsCartAndDetail> goodsCart);
	
	/**
	 * 根据桌台名称查询已删除的可修改必点菜
	 * @param storeId
	 * @param tableNo
	 * @return
	 */
	List<GoodsCart> getDeletedNeedGoodsCartByTableNo(Integer storeId,String tableNo, String startDate, String endDate);
	
	/**
	 * 根据用户id查询已删除的可修改必点菜
	 * @param storeId
	 * @param buyerId
	 * @return
	 */
	List<GoodsCart> getDeletedNeedGoodsCartByBuyerId(Integer storeId,String buyerId, String startDate, String endDate);
	
	/**
	 * 根据桌台清除购物车已删除可修改必点菜
	 * @param storeId
	 * @param tableNo
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	int removeDeletedNeedGoodsCartByTableNo(Integer storeId,String tableNo, String startDate, String endDate);
	
	/**
	 * 根据用户id清除购物车已删除可修改必点菜
	 * @param storeId
	 * @param buyerId
	 * @param startDate
	 * @param endDate
	 * @param clientOrderMode
	 * @return
	 */
	int removeDeletedNeedGoodsCartByBuyerId(Integer storeId,String buyerId, String startDate, String endDate);

	/**
	 * 根据桌台清空可修改必选菜
	 * @param storeId
	 * @param tableName
	 * @param mustOrder
	 */
	void updateNeedGoodsByTableNo(Integer storeId, String tableName);

	/**
	 * 根据buyerId清空可修改必选菜
	 * @param storeId
	 * @param buyerId
	 * @param mustOrder
	 */
	void updateNeedGoodsByBuyerId(Integer storeId, String buyerId);
}
